#ifndef ARBOLBMASMOCK_H_
#define ARBOLBMASMOCK_H_

#include "../ArbolB+/ArbolBMas.h"
#include "../ArbolB+/NodoInterno.h"
#include "../ArbolB+/NodoHoja.h"
#include "../ArbolB+/RegistroInterno.h"
#include "../ArbolB+/RegistroHoja.h"

using namespace Arboles;

namespace Mocks{

class ArbolBMasMock {
/*NODO 0:  2, 1;  8(41543)  7
	 NODO 8:  1, 3;  2(12853)  9(20173)  5(33810)  4
		 NODO 2:  0, 4;  (  951)( 2394)( 4963)( 7790)  9
		 NODO 9:  0, 5;  (12853)(12917)(13401)(18004)(18488)  5
		 NODO 5:  0, 6;  (20173)(21373)(23548)(27906)(28195)(29084)  4
		 NODO 4:  0, 4;  (33810)(34466)(39784)(39794)  1
 	 NODO 7:  1, 2;  1(46396)  6(48442)  3
		 NODO 1:  0, 3;  (41543)(44353)(45454)  6
		 NODO 6:  0, 3;  (46396)(47165)(47405)  3
		 NODO 3:  0, 5;  (48442)(49460)(50699)(58648)(64807)   0
 */
private:
	ArbolBMas* arbol;
public:
	ArbolBMasMock();
	virtual ~ArbolBMasMock();

	//TODO ver si este mock sirve
	static void armarArbol(){
		this->arbol = new ArbolBMas();

			Nodo* nodoRaiz = new NodoInterno();
			Nodo* nodoInt8 = new NodoInterno();
			Nodo* nodoInt7 = new NodoInterno();

			Nodo* nodoHoja1 = new NodoHoja();
			Nodo* nodoHoja2 = new NodoHoja();
			Nodo* nodoHoja3 = new NodoHoja();
			Nodo* nodoHoja4 = new NodoHoja();
			Nodo* nodoHoja5 = new NodoHoja();
			Nodo* nodoHoja6 = new NodoHoja();
			Nodo* nodoHoja9 = new NodoHoja();

			RegistroArbol* regInt1 = new RegistroInterno();
			RegistroArbol* regInt2 = new RegistroInterno();
			RegistroArbol* regInt3 = new RegistroInterno();
			RegistroArbol* regInt4 = new RegistroInterno();
			RegistroArbol* regInt5 = new RegistroInterno();
			RegistroArbol* regInt6 = new RegistroInterno();

			RegistroArbol* regHoja01 = new RegistroHoja();
			RegistroArbol* regHoja02 = new RegistroHoja();
			RegistroArbol* regHoja03 = new RegistroHoja();
			RegistroArbol* regHoja04 = new RegistroHoja();
			RegistroArbol* regHoja05 = new RegistroHoja();
			RegistroArbol* regHoja06 = new RegistroHoja();
			RegistroArbol* regHoja07 = new RegistroHoja();
			RegistroArbol* regHoja08 = new RegistroHoja();
			RegistroArbol* regHoja09 = new RegistroHoja();
			RegistroArbol* regHoja10 = new RegistroHoja();
			RegistroArbol* regHoja11 = new RegistroHoja();
			RegistroArbol* regHoja12 = new RegistroHoja();
			RegistroArbol* regHoja13 = new RegistroHoja();
			RegistroArbol* regHoja14 = new RegistroHoja();
			RegistroArbol* regHoja15 = new RegistroHoja();
			RegistroArbol* regHoja16 = new RegistroHoja();
			RegistroArbol* regHoja17 = new RegistroHoja();
			RegistroArbol* regHoja18 = new RegistroHoja();
			RegistroArbol* regHoja19 = new RegistroHoja();
			RegistroArbol* regHoja20 = new RegistroHoja();
			RegistroArbol* regHoja21 = new RegistroHoja();
			RegistroArbol* regHoja22 = new RegistroHoja();
			RegistroArbol* regHoja23 = new RegistroHoja();
			RegistroArbol* regHoja24 = new RegistroHoja();
			RegistroArbol* regHoja25 = new RegistroHoja();
			RegistroArbol* regHoja26 = new RegistroHoja();
			RegistroArbol* regHoja27 = new RegistroHoja();
			RegistroArbol* regHoja28 = new RegistroHoja();
			RegistroArbol* regHoja29 = new RegistroHoja();
			RegistroArbol* regHoja30 = new RegistroHoja();

			//	/*NODO 0:  2, 1;  8(41543)  7
			nodoRaiz->numeroNodo = 0;
			nodoRaiz->nivel = 2;
				reg1->clave = "41543";
				((RegistroInterno*) regInt1)->referenciaNodoIzquierdo = 8;
				((RegistroInterno*) regInt1)->referenciaNodoDerecho = 7;
			nodoRaiz->listaRegistros->push_back(regInt1);
			this->arbol->raiz = nodoRaiz;

			//		NODO 8:  1, 3;  2(12853)  9(20173)  5(33810)  4
			nodoInt8->numeroNodo = 8;
			nodoInt8->nivel = 1;
				regInt2->clave = "12853";
				((RegistroInterno*) regInt2)->referenciaNodoIzquierdo = 2;
				((RegistroInterno*) regInt2)->referenciaNodoDerecho = 9;

				regInt3->clave = "20173";
				((RegistroInterno*) regInt3)->referenciaNodoIzquierdo = 9;
				((RegistroInterno*) regInt3)->referenciaNodoDerecho = 5;

				regInt4->clave = "33810";
				((RegistroInterno*) regInt4)->referenciaNodoIzquierdo = 5;
				((RegistroInterno*) regInt4)->referenciaNodoDerecho = 4;

			nodoInt8->listaRegistros->push_back(regInt4);
			nodoInt8->listaRegistros->push_back(regInt3);
			nodoInt8->listaRegistros->push_back(regInt2);

			//			NODO 2:  0, 4;  (  951)( 2394)( 4963)( 7790)  9
			nodoHoja2->numeroNodo = 2;
			nodoHoja2->nivel = 0;
				regHoja01->clave = "951";
				regHoja02->clave = "2394";
				regHoja03->clave = "4963";
				regHoja04->clave = "7790";
			nodoHoja2->listaRegistros->push_back(regHoja04);
			nodoHoja2->listaRegistros->push_back(regHoja03);
			nodoHoja2->listaRegistros->push_back(regHoja02);
			nodoHoja2->listaRegistros->push_back(regHoja01);
			((NodoHoja*)nodoHoja2)->referenciaNodoSiguiente = 9;

			//			NODO 9:  0, 5;  (12853)(12917)(13401)(18004)(18488)  5
			nodoHoja9->numeroNodo = 9;
			nodoHoja9->nivel = 0;
				regHoja05->clave = "12853";
				regHoja06->clave = "12917";
				regHoja07->clave = "13401";
				regHoja08->clave = "18004";
				regHoja09->clave = "18488";
			((NodoHoja*)nodoHoja9)->referenciaNodoSiguiente = 5;

			//			NODO 5:  0, 6;  (20173)(21373)(23548)(27906)(28195)(29084)  4
			nodoHoja5->numeroNodo = 5;
			nodoHoja5->nivel = 0;
				regHoja10->clave = "20173";
				regHoja11->clave = "21373";
				regHoja12->clave = "23548";
				regHoja13->clave = "27906";
				regHoja14->clave = "28195";
				regHoja15->clave = "29084";
			((NodoHoja*)nodoHoja5)->referenciaNodoSiguiente = 4;

			//			NODO 4:  0, 4;  (33810)(34466)(39784)(39794)  1
			nodoHoja4->numeroNodo = 4;
			nodoHoja4->nivel = 0;
				regHoja16->clave = "20173";
				regHoja17->clave = "21373";
				regHoja18->clave = "23548";
				regHoja19->clave = "27906";
				regHoja20->clave = "28195";
				regHoja21->clave = "29084";
			((NodoHoja*)nodoHoja5)->referenciaNodoSiguiente = 4;

			//		NODO 7:  1, 2;  1(46396)  6(48442)  3
			nodoInt7->numeroNodo = 7;
			nodoInt7->nivel = 1;
				regInt5->clave = "46396";
					((RegistroInterno*) regInt5)->referenciaNodoIzquierdo = 1;
					((RegistroInterno*) regInt5)->referenciaNodoDerecho = 6;

				regInt6->clave = "48442";
					((RegistroInterno*) regInt6)->referenciaNodoIzquierdo = 6;
					((RegistroInterno*) regInt6)->referenciaNodoDerecho = 3;

			nodoInt7->listaRegistros->push_back(regInt6);
			nodoInt7->listaRegistros->push_back(regInt5);

			//			NODO 1:  0, 3;  (41543)(44353)(45454)  6
			nodoHoja1->numeroNodo = 1;
			nodoHoja1->nivel = 0;
				regHoja22->clave = "41543";
				regHoja23->clave = "44353";
				regHoja24->clave = "45454";
			((NodoHoja*)nodoHoja5)->referenciaNodoSiguiente = 6;

			//			NODO 6:  0, 3;  (46396)(47165)(47405)  3
			nodoHoja6->numeroNodo = 6;
			nodoHoja6->nivel = 0;
				regHoja25->clave = "46396";
				regHoja26->clave = "47165";
				regHoja27->clave = "47405";
			((NodoHoja*)nodoHoja6)->referenciaNodoSiguiente = 3;

			//			NODO 3:  0, 5;  (48442)(49460)(50699)(58648)(64807)   0
			nodoHoja3->numeroNodo = 6;
			nodoHoja3->nivel = 0;
				regHoja28->clave = "48442";
				regHoja29->clave = "47165";
				regHoja30->clave = "47405";
			((NodoHoja*)nodoHoja3)->referenciaNodoSiguiente = 3;

			//TODO delete todos
	}
};
}
#endif
